package com.easylinkin.linkappapi.iaqi.config;

import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.easylinkin.linkappapi.config.entity.Config;
import com.easylinkin.linkappapi.config.service.ConfigService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 配置中心的使用，可以参照此用吗，配置的数据结构，自行定义
 * 空气质量检测-配置
 *
 * @author tongjie
 */
@Component
public class IaqiConfigUtil {
    @Resource
    ConfigService configService;

    private final String key = "IAQI_STATISTICS_DEVICE_CODES";

    public List<IaqiConfig> getConfigs() {
        List<IaqiConfig> result = new ArrayList<>();
        List<Config> list = configService.selectList(new Config(key).setTenantId("null"), true);
        for (Config config : list) {
            String value = config.getValue();
            List<IaqiConfig> iaqiConfigs = JSONArray.parseArray(value,IaqiConfig.class);
            result.addAll(iaqiConfigs);
        }
        return result;
    }

    /**
     * 获取指定租户的这个配置
     *
     * @param key      key字符串
     * @param tenantId 租户id
     * @return 获取租户指定key配置信息
     */
    public List<IaqiConfig> getConfigs(String key, String tenantId) {
        List<IaqiConfig> result = new ArrayList<>();
        Config configEx = new Config(key);
        configEx.setTenantId(tenantId);
        List<Config> list = configService.selectList(configEx, true);
        for (Config config : list) {
            String value = config.getValue();
            List<IaqiConfig> iaqiConfigs = JSONArray.parseArray(value, IaqiConfig.class);
            result.addAll(iaqiConfigs);
        }
        return result;
    }

    /**
     * 获取原始配置信息
     * @param key key
     * @param tenantId tenantid
     * @return 配置信息list
     */
    public Config getOneConfigs(String key, String tenantId) {
        Config configEx = new Config(key);
        if (StringUtils.isNotBlank(tenantId)){
            configEx.setTenantId(tenantId);
        }
        List<Config> list = configService.selectList(configEx, true);
        if (CollectionUtil.isNotEmpty(list)){
            return list.get(0);
        }
        return null;
    }

}
